package config

import (
	"kms-backend/utils/logs"
	"path"
	"runtime"

	"github.com/sirupsen/logrus"
	"github.com/spf13/viper"
	"k8s.io/client-go/kubernetes"
)

// 定义一些常量

const (
	TimeFormat                string = "2006-01-02 15:04:05"
	DBUser                           = "jiangfei"
	DBHost                           = "192.168.10.3"
	DBName                           = "jf_test"
	DBPassword                       = "Hczj@2023"
	DBPort                           = 3306
	DBtimeout                        = "10s"
	ClusterConfingSecretKey   string = "kubeasy.com/cluster.metadata"
	ClusterConfingSecretValue string = "true"
)

var (
	Port               string
	JwtSignKey         string
	JwtExpireTime      int64                 // jwt token 过期时间，单位： 分钟
	MetadataNamespace  string                // 元数据存储的namespace
	InClusterClientSet *kubernetes.Clientset // Incluster客户端工具
	ClusterKubeConfig  map[string]string     // 存储集群kubeconfig
)

func initLogConfig(logLevel string) {
	// 配置程序的日志输出级别
	if logLevel == "DEBUG" {
		logrus.SetLevel(logrus.DebugLevel)
	} else {
		logrus.SetLevel(logrus.InfoLevel)
	}

	// 文件名和行号
	logrus.SetReportCaller(true)

	// 日志格式改为json
	logrus.SetFormatter(&logrus.JSONFormatter{
		TimestampFormat: TimeFormat,
		CallerPrettyfier: func(f *runtime.Frame) (function string, file string) {
			fileName := path.Base(f.File)
			return f.Function, fileName
		},
	})

}

// 定义一个gin 中返回数据的结构体

type ReturnData struct {
	Message string                 `json:"message"`
	Status  int                    `json:"status"`
	Data    map[string]interface{} `json:"data"`
}

// 构造函数
func NewReturnData() ReturnData {
	returnData := ReturnData{}
	returnData.Status = 200
	data := make(map[string]interface{})
	returnData.Data = data
	return returnData
}

func init() {
	logs.Debug(nil, "开始加载程序配置")
	// 环境变量加载
	viper.SetDefault("LOG_LEVEL", "DEBUG")
	viper.AutomaticEnv()

	logLevel := viper.GetString("LOG_LEVEL")
	// 加载日志格式
	initLogConfig(logLevel)

	// 设置jwt环境变量

	viper.SetDefault("JWT_SIGN_KEY", "Bigberg")
	JwtSignKey = viper.GetString("JWT_SIGN_KEY")

	// 设置jwt过期时间,默认值120分钟
	viper.SetDefault("JWT_EXPIRE_TIME", 120)
	JwtExpireTime = viper.GetInt64("JWT_EXPIRE_TIME")

	// 元数据的metadatanamespace
	viper.SetDefault("METADATA_NAMESPACE", "kms")
	MetadataNamespace = viper.GetString("METADATA_NAMESPACE")

	// 设置端口号
	viper.SetDefault("PORT", "8080")
	Port = ":" + viper.GetString("PORT")
}
